﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MMK.PaketTracker.Server.UnitTests.PaketTrackerServer;

namespace MMK.PaketTracker.Server.UnitTests
{
    [TestClass]
    public class UnitTest1
    {
        public static Guid mitarbeiterGuid;
        public static Guid paketstelleGuid;
        public static Guid paketzentrumGuid;
        public static Guid fahrzeugGuid;
        public static PaketTrackerServer.WebservicesSoapClient client;
        public static string paketIdent;

        public UnitTest1()
        {
            mitarbeiterGuid = new Guid("CA89DAD4-0E74-44EB-92DA-E94F03EF05D1");
            paketstelleGuid = new Guid("29e73647-9558-4581-a85f-2e1d019a36c9");
            paketzentrumGuid = new Guid("002a7358-93a3-4377-a73b-3f3fbc45e61a");
            fahrzeugGuid = new Guid("c0065c36-e8fc-48f8-8234-1185abdecaef");

            client = new PaketTrackerServer.WebservicesSoapClient();
        }
        
        [TestMethod]
        public void Test_IsMitarbeiterValid()
        {
            Mitarbeiter mit = client.IsMitarbeiterValid("12345");

            Assert.IsNotNull(mit);
        }

        [TestMethod]
        public void Test_NewPaket()
        {
            Adresse absender = new Adresse();
            absender.Name = "Gloth";
            absender.Vorname = "Kai";
            absender.Strasse = "Am Münster";
            absender.Hausnummer = "8";
            absender.PLZ = "37154";
            absender.Ort = "Northeim";

            Adresse empfaenger = new Adresse();
            empfaenger.Name = "Gloth";
            empfaenger.Vorname = "Kai";
            empfaenger.Strasse = "Am Münster";
            empfaenger.Hausnummer = "8";
            empfaenger.PLZ = "37154";
            empfaenger.Ort = "Northeim";

            paketIdent = client.NewPaket(1.0, 1.0, absender, empfaenger);

            Assert.IsTrue(paketIdent.Length > 0);
        }

        [TestMethod]
        public void Test_GetAdresse()
        {
            Adresse adresse1 = client.GetAdresse(paketIdent, AdresseType.Absender);
            Adresse adresse2 = client.GetAdresse(paketIdent, AdresseType.Empfaenger);

            Assert.IsNotNull(adresse1);
            Assert.IsNotNull(adresse2);
        }

        [TestMethod]
        public void Test_InVersandprozessAufgenommen()
        {
            client.InVersandprozessAufgenommen(paketIdent, mitarbeiterGuid, paketstelleGuid, "Aufgenommen");
            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsTrue(status.Status == PaketStatusType.InVersandprozessAufgenommen);
        }

        [TestMethod]
        public void Test_ImVersandprozess()
        {
            client.ImVersandprozess(paketIdent, mitarbeiterGuid, paketzentrumGuid, "Wird versendet");
            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsTrue(status.Status == PaketStatusType.ImVersandprozess);
        }

        [TestMethod]
        public void Test_InAuslieferung()
        {
            client.InAuslieferung(paketIdent, mitarbeiterGuid, fahrzeugGuid, "In Auslieferung");
            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsTrue(status.Status == PaketStatusType.InAuslieferung);
        }

        [TestMethod]
        public void Test_GPS()
        {
            client.GPS(fahrzeugGuid, new GPSCoordinate() { Latitude = 51.547976, Longitude = 9.932199 });

            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsTrue(status.Status == PaketStatusType.InAuslieferung);
        }

        [TestMethod]
        public void Test_Ausgeliefert()
        {
            client.Ausgeliefert(paketIdent, mitarbeiterGuid, fahrzeugGuid, "Ausgeliefert an Gloth");

            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsTrue(status.Status == PaketStatusType.Ausgeliefert);
        }

        [TestMethod]
        public void Test_GetAllPaketStatus()
        {
            List<PaketStatus> list = client.GetAllPaketStatus(paketIdent).ToList();

            Assert.IsTrue(list.Count > 0);
        }

        [TestMethod]
        public void Test_GetMitarbeiter()
        {
            Mitarbeiter mit = client.GetMitarbeiter(mitarbeiterGuid);

            Assert.IsNotNull(mit);
        }

        [TestMethod]
        public void Test_GetPaketStatusWithoutImage()
        {
            PaketStatus status = client.GetPaketStatus(paketIdent);

            Assert.IsNotNull(status);
        }

        [TestMethod]
        public void Test_GetPaketStatus()
        {
            PaketStatus status = client.GetPaketStatusWithoutImage(paketIdent);

            Assert.IsNotNull(status);
            Assert.IsNull(status.MapImage);
        }


    }
}
